package com.proyecto.core.vista.echo.componentes;

import java.util.ResourceBundle;

import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.vista.echo.base.RwBotoneraAceptarCancelar;
import com.proyecto.core.vista.echo.base.RwOptionReporteador;
import com.proyecto.core.vista.echo.constantes.MensajeTipo;
import com.proyecto.core.vista.echo.interfaces.ICPAreaReporte;

import consultas.echo2consultas.SpWindowPane;
import nextapp.echo2.app.Row;

public class WPReporte extends SpWindowPane {
	
	private static final long serialVersionUID = -6841752394219037591L;

	@SuppressWarnings("unused")
	private ResourceBundle resourceBundle;
	private String claveMensaje;
	protected ContentPane cpPrincipal = ApplicationInstance.getActive().getDefaultWindow().getContent();	
	
	private ProcesarReporte procesarReporte;
	
    private ActionListener actionProcessorAceptar = new ActionListener() {
		private static final long serialVersionUID = 1707984151832872154L;
		public void actionPerformed(ActionEvent e) { 
        	ejecutarAccionAceptar();
        	//if (esReporteProcesado) getParent().remove(WPReporte.this);
        }
    };
    
    private ActionListener actionProcessorCancelar = new ActionListener() {
		private static final long serialVersionUID = -3870743761443935023L;
		public void actionPerformed(ActionEvent e) {
        	ejecutarAccionCancelar();
            getParent().remove(WPReporte.this);
        }
    };
    
    private Object  resultadoClaves;
	private Integer accion;
	private boolean esReporteProcesado;
	
	private RwBotoneraAceptarCancelar rwBotoneraAceptarCancelar;
	private RwOptionReporteador rwOptionReporteador;
	
	//private String claveTemp;
	private ICPAreaReporte cpReporte;
	private SplitPane spAreas;

	public WPReporte(ICPAreaReporte areaReporte) {
        super();
        initComponents();
        this.cpReporte = areaReporte;
        this.cpReporte.setWpReporte(this);
        this.setTitle(areaReporte.getTituloVentana());
        this.setStyleName("DefaultSPWinPane");
        this.setResizable(false);
        this.setMaximizable(false);
        this.setMinimizable(false);
        System.out.println("areaReporte.getAreaDatosAlto()-> " + areaReporte.getAreaDatosAlto());
        System.out.println("areaReporte.getAreaDatosAncho()-> " + areaReporte.getAreaDatosAncho());
		this.setHeight(new Extent((areaReporte.getAreaDatosAlto() == null ? 250 : areaReporte.getAreaDatosAlto()), Extent.PX));
		this.setWidth(new Extent((areaReporte.getAreaDatosAncho() == null ? 350 : areaReporte.getAreaDatosAncho()), Extent.PX));
		
        rwBotoneraAceptarCancelar.getBtnAceptar().addActionListener(actionProcessorAceptar);
        rwBotoneraAceptarCancelar.getBtnCancelar().addActionListener(actionProcessorCancelar);
        rwBotoneraAceptarCancelar.getBtnInfoSistema().inicializar(this.getClass().getName(), 
													        		cpReporte.getClass().getName(), 
													        		cpReporte.getServicioNombre());
        spAreas.add((Component) cpReporte);
    }
    
	protected void ejecutarAccionAceptar() {
		String  mensajeCompleto = "";
		boolean aceptado        = false;
		GeneralException eLocal = null; 
			
		resultadoClaves = null;
		try {
			this.esReporteProcesado = cpReporte.rutinaAccionAceptar();
		} catch (GeneralException e) {
			eLocal = e;
			try{
				claveMensaje = eLocal.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale());
			}catch (Exception e1){}
		}

		if (!this.esReporteProcesado) {
			DialogoMensajes dm = new DialogoMensajes("Error",claveMensaje,MensajeTipo.ALERTA);
			cpPrincipal.add(dm);
			this.esReporteProcesado = false;
		}
	}

	protected void ejecutarAccionCancelar() {
		this.esReporteProcesado = false;
	}

	final public void activar(Object objetoDTO, ContentPane cpPadre, ProcesarReporte procRep) {
		
		if (objetoDTO !=null){
			cpReporte.setObjetoDTO(objetoDTO);
		}else{
			cpReporte.EjecutarConfigurarBinding();
		}
		
		this.procesarReporte = procRep;
		cpReporte.rutinaAccionMostrar();
		cpPadre.add(this);
	}

	/**
	 * @return the resultadoClaves
	 */
	public Object getResultadoClaves() {
		return resultadoClaves;
	}

	final public Object getObjetoDTO() {
		return cpReporte.getObjetoDTO();
	}
	
	
	final public boolean getEsReporteProcesado() {
		return esReporteProcesado;
	}

	final protected void cAreaDatosadd() {
		
	}
	
	public void setAccion(Integer accion) {
		this.accion = accion;
	}

	public void addActionListener(ActionListener l) {
        getEventListenerList().addListener(ActionListener.class, l);
    }
    
    public void removeActionListener(ActionListener l) {
        getEventListenerList().removeListener(ActionListener.class, l);
    }

	final public RwBotoneraAceptarCancelar getRwBotoneraAceptarCancelar() {
		return rwBotoneraAceptarCancelar;
	}

	public String getClaveMensaje() {
		return claveMensaje;
	}

	public void setClaveMensaje(String claveMensaje) {
		this.claveMensaje = claveMensaje;
	}

	public ProcesarReporte getProcesarReporte() {
		return procesarReporte;
	}

	public void setProcesarReporte(ProcesarReporte procesarReporte) {
		this.procesarReporte = procesarReporte;
	}

	public RwOptionReporteador getRwOptionReporteador() {
		return rwOptionReporteador;
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		resourceBundle = ResourceBundle.getBundle(
				"com.proyecto.core.vista.echo.resource.localization.etiquetas",
				ApplicationInstance.getActive().getLocale());
		this.setHeight(new Extent(250, Extent.PX));
		this.setModal(true);
		spAreas = new SplitPane();
		spAreas.setOrientation(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP);
		spAreas.setSeparatorPosition(new Extent(32, Extent.PX));
		add(spAreas);
		rwBotoneraAceptarCancelar = new RwBotoneraAceptarCancelar();
		spAreas.add(rwBotoneraAceptarCancelar);
	}
		
}
